export interface RequestOptions {
    // 后端请求地址
    apiUrl?: string
    // 后端请求地址前缀
    apiUrlPrefix?: string
    // 模块前缀
    apiModulePrefix?: string
    // 不进行任何处理，直接返回
    isTransformResponse?: boolean
    // 是否返回原生响应头
    isReturnNativeResponse?: boolean
    //忽略重复请求
    ignoreCancelToken?: boolean
    // 是否携带token
    withToken?: boolean

    successFn?: boolean | ((response: ResponseData<any>, options: RequestOptions) => unknown)
    errorFn?: boolean | ((response: ResponseData<any>, options: RequestOptions) => unknown)

    // // 请求参数拼接到url
    // joinParamsToUrl?: boolean
    // // 格式化请求参数时间
    // formatDate?: boolean
    // // 是否显示提示信息
    // isShowMessage?: boolean
    // // 是否解析成JSON
    // isParseToJson?: boolean
    // // 成功的文本信息
    // successMessageText?: string
    // // 是否显示成功信息
    // isShowSuccessMessage?: boolean
    // // 是否显示失败信息
    // isShowErrorMessage?: boolean
    // // 错误的文本信息
    // errorMessageText?: string
    // // 是否加入url
    // joinPrefix?: boolean
    // // 接口地址， 不填则使用默认apiUrl
    // apiUrl?: string
    // // 请求拼接路径
    // urlPrefix?: string
    // // 错误消息提示类型
    // errorMessageMode?: "none" | "modal"
    // // 是否添加时间戳
    // joinTime?: boolean
}

/**
 * 前后端交互对象
 */
export interface ResponseData<T = any> {
    status: boolean
    code: string
    message: string
    data?: T
    traceId: string
}

/**
 * 返回错误
 */
export class ResponseBodyError extends Error {
    code?: string
    cause?: any

    constructor({ code, message, cause }: { code: string; message: string; cause?: any }) {
        super(message)
        this.code = code
        this.cause = cause
    }
}
